﻿// Aggressive cows POJ - 2456.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <algorithm>


using namespace std;
//https://vjudge.csgrandeur.cn/problem/POJ-2456

/*
农场主约翰新建了一个长谷仓，里面有 N (2 <= N <= 100,000) 个牲口棚。
牛栏沿着一条直线分布在 x1、......、xN（0 <= xi <= 1,000,000,000）处。

他的 C（2 <= C <= N）头奶牛不喜欢这种牛舍布局，一旦被关进牛栏，就会互相攻击。
为了防止奶牛之间互相伤害，FJ 想把奶牛分配到牛栏里，使任何两头奶牛之间的最小距离尽可能大。
最大的最小距离是多少？
输入
* 第 1 行 两个空格分隔的整数： N 和 C
* 第 2...N+1 行： 第 i+1 行包含一个整数坐标位置 xi
输出
* 第 1 行： 一个整数：最大最小距离
* 

5 3
1
2
8
4
9

3

*/

int n, c;
const int N = 100010;
int arr[N];


bool check(int x) {
	int cnt = 0; int last = -1;
	for (int i = 0; i < n; i++) {
		if (i == 0 || arr[i] - arr[last] >= x) {
			cnt++; last = i;
		}
	}

	if (cnt >= c) return true;
	return false;
}


void solve() {
	sort(arr, arr + n);
	int l = 1; int r = 1000000010;
	while (l < r) {
		int mid = (l + r + 1) >> 1;
		if (check(mid)) l = mid;
		else r = mid - 1;
	}

	cout << l << endl;
}


int main()
{
	scanf("%d%d",&n,&c);
	for (int i = 0; i < n; i++) {
		scanf("%d",&arr[i]);
	}
	solve();

	return 0;
}
 